home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1993 October: Windmill on DISC / ADC Developer CD (1993-10) (''Windmill On DISC'')_iso / Dev.CD Oct 93.iso / System Software / U.S. System Software / System 7 Pro™ Beta 11 / Development Tools / Interfaces / PInterfaces / OCETemplates.p < prev   
Encoding:
Text File  |  1993-08-17  |  71.1 KB  |  1,715 lines  |  [TEXT/MPS ]

  1. {***********************************************************
  2.  
  3. Created: Tuesday, August 17, 1993 4:37:24 PM
  4.  OCETemplates.p
  5.  Pascal Interface to the Macintosh Libraries
  6.  
  7.   Copyright Apple Computer, Inc. 1990-1993
  8.   All rights reserved
  9.  
  10. ***********************************************************}
  11.  
  12.  
  13. {$IFC UNDEFINED UsingIncludes}
  14. {$SETC UsingIncludes:= 0}
  15. {$ENDC}
  16.  
  17. {$IFC NOT UsingIncludes}
  18.     UNIT OCETemplates;
  19.     INTERFACE
  20. {$ENDC}
  21.  
  22. {$IFC UNDEFINED UsingOCETemplates}
  23. {$SETC UsingOCETemplates:= 1}
  24.  
  25. {$I+}
  26. {$SETC OCETemplatesIncludes:= UsingIncludes}
  27. {$SETC UsingIncludes:= 1}
  28.  
  29.  
  30. {$IFC UNDEFINED UsingTypes}
  31. {$I $$Shell(PInterfaces)Types.p}
  32. {$ENDC}
  33.  
  34. {$IFC UNDEFINED UsingEvents}
  35. {$I $$Shell(PInterfaces)Events.p}
  36. {$ENDC}
  37.  
  38. {$IFC UNDEFINED UsingOCE}
  39. {$I OCE.p}
  40. {$ENDC}
  41.  
  42. {$IFC UNDEFINED UsingOCEStandardMail}
  43. {$I OCEStandardMail.p}
  44. {$ENDC}
  45.  
  46. {$SETC UsingIncludes:= OCETemplatesIncludes}
  47.  
  48.  
  49.  
  50. {**********************************************************************************************}
  51. {******************************** Template Resource Constants: ********************************}
  52. {**********************************************************************************************}
  53.  
  54.  
  55. { Current versions of all the different template types: }
  56.  
  57. CONST
  58. kDETAspectVersion        = -976;
  59. kDETInfoPageVersion        = -976;
  60. kDETKillerVersion        = -976;
  61. kDETForwarderVersion    = -976;
  62. kDETFileTypeVersion        = -976;
  63.  
  64.  
  65. { "Normal" separation for template IDs within the file (this is just a suggestion; you can use whatever
  66.     separation you like, so long as two separate templates don't have overlapping resources): }
  67. kDETIDSep = 250;
  68.  
  69. { A few predefined base IDs (again, just suggestions): }
  70. kDETFirstID        = (1000);
  71. kDETSecondID    = (1000+kDETIDSep);
  72. kDETThirdID        = (1000+2*kDETIDSep);
  73. kDETFourthID    = (1000+3*kDETIDSep);
  74. kDETFifthID        = (1000+4*kDETIDSep);
  75.  
  76. {    Templates consist of a set of associated resources, at constant offsets from a "base ID" set by the
  77.     signature resource of the template. In the case of aspect templates, most of the resources in the
  78.     template are accessible from the template as property default values. The property number is the same
  79.     as the offset from the base ID of the resource. In describing the resources which make up templates,
  80.     we give the type, the offset, and a description. For aspect templates, the offset is also the property #. }
  81.     
  82. {    All templates include the following resource fork resources:
  83.  
  84.      Type    Offset                        Description
  85.      ----    ------                        -----------
  86.     'rstr'    kDETTemplateName            Contains the name of the template
  87.  
  88. }
  89.  
  90. kDETTemplateName = 0;
  91.  
  92. {    Aspects, info-pages, and forwarders include the following as well:
  93.  
  94.      Type    Offset                        Description
  95.      ----    ------                        -----------
  96.     'rstr'    kDETRecordType                Contains the type of record this applies to
  97.     'rstr'    kDETAttributeType            Contains the type of attribute this applies to
  98.     'detn'    kDETAttributeValueTag        Contains the tag of the attribute values this applies to
  99.  
  100. }
  101.  
  102. kDETRecordType                = 1;
  103. kDETAttributeType            = 2;
  104. kDETAttributeValueTag        = 3;
  105.  
  106.  
  107. { ************************************ Aspects }
  108.  
  109. {    In the case of aspects, property numbers and resource id offsets are the same. Therefore, some of the following
  110.     defines are used for resource offsets, some are used for dynamically generated properties, and some are used for
  111.     both (i.e., properties which may be dynamically generated, but if they aren't, then they're taken from the
  112.     resource). Resource types are given in all cases below; even if there is no actual resource (for example in
  113.     the case of kDETAspectName), it indicates the type for the dynamically generated property. A resource type of
  114.     'rstr' corresponds to a property type of kDETPrTypeString; type 'detn' corresponds to kDETPrTypeNumber; and
  115.     'detb' corresponds to kDETPrTypeBinary.
  116.  
  117.      Type    Offset                        Description
  118.      ----    ------                        -----------
  119.     'deta'    0                            Identifies the type of resource
  120.     'detc'    kDETCode                    Is the code resource, if any is used
  121.     'ICN#'    kDETAspectMainBitmap
  122.     'icl8'    kDETAspectMainBitmap
  123.     'icl4'    kDETAspectMainBitmap
  124.     'ics#'    kDETAspectMainBitmap
  125.     'ics8'    kDETAspectMainBitmap
  126.     'ics4'    kDETAspectMainBitmap
  127.     'sicn'    kDETAspectMainBitmap        Is the icon suite to display for this item type (main aspect only)
  128.     'rstr'    kDETAspectName                Contains the name of the item (attribute main aspect only)
  129.     'rst#'    kDETAspectCategory            Contains the internal categories for the record type (main aspect only)
  130.     'rst#'    kDETAspectExternalCategory    Contains the external (user-visible) names which correspond to the categories in
  131.                                         kDETAspectCategory; if this resource is not present, external names are taken from
  132.                                         another template; if no other template provides an external name for a given internal
  133.                                         category, the internal name is used as the external name (main aspect only)
  134.     'rstr'    kDETAspectKind                Is the item kind to display (main aspect only)
  135.     'detn'    kDETAspectGender            Is the gender of this kind of object for internationalization (main aspect only)
  136.     'rstr'    kDETAspectWhatIs            Is the string for balloon help when item is in sublist (main aspect only)
  137.     'rstr'    kDETAspectAliasKind            Is the item kind to display for aliases to this type of item (main aspect only)
  138.     'detn'    kDETAspectAliasGender        Is the gender of an alias to this kind of object for internationalization (main aspect only)
  139.     'rstr'    kDETAspectAliasWhatIs        Is the string for balloon help when an alias to the item is in sublist (main aspect only)
  140.     'rst#'    kDETAspectBalloons            Is a list of strings for balloon help; for each item in an info-page, it's
  141.                                         property # times 2 is used as an index into this array; if the item is not editable,
  142.                                         then the property # times 2 plus 1 is used
  143.     'rstr'    kDETAspectNewMenuName        Is the string to be used for the user to select new item creation; for records, the
  144.                                         string is used as a menu entry in the Catalogs menu; for attributes, the string
  145.                                         is used in a selection dialog invoked by an "Add..." button
  146.     'rstr'    kDETAspectNewEntryName        Is the name to be used for new records (with a digit appended if not unique)
  147.     'detb'    kDETAspectNewValue            Is the value to use when creating a new attribute value; the first four bytes
  148.                                         is the tag; the rest is the attribute value contents
  149.     'detn'    kDETAspectSublistOpenOnNew    If true (non-zero), automatically open newly created entries (property can be set
  150.                                         from a code resource, or via a default value in a resource)
  151.     'dett'    kDETAspectLookup            Is the attribute-to-property translation table
  152.     'rstr'    kDETAspectDragInString        Is a string describing the action of dragging into this aspect (if any)
  153.     'rstr'    kDETAspectDragInVerb        Is a single, short word that's the verb of the action (like "add" or "drop"; if
  154.                                         there's any doubt, use "OK")
  155.     'rstr'    kDETAspectDragInSummary        Is a short phrase that describes the action, suitable to be included in a selection list
  156.     'rst#'    kDETAspectRecordDragIn        Is a list of type pairs; in each pair, the first is the type of a record which
  157.                                         can be dragged into this aspect, and the second is the attribute type to store
  158.                                         the reference in
  159.     'rst#'    kDETAspectRecordCatDragIn    Is a list of category/attribute type pairs; in each pair, the first is the
  160.                                         category of records which can be dragged in, and the second is the type of
  161.                                         attribute to place the alias in
  162.     'rst#'    kDETAspectAttrDragIn        Is a list of type triples; in each triple, the first is the record type which can be
  163.                                         dragged from (or "" for any), the second is the attribute type which can be dragged
  164.                                         in, and the third is the attribute type to store the new attribute in
  165.     'rst#'    kDETAspectDragOut            Is a list of attribute types which can be dragged out of this aspect (an 'rst#'
  166.                                         resource with no entries means nothing can be dragged out; no 'rst#' resource means
  167.                                         everything can be dragged out)
  168.     'detm'    kDETAspectViewMenu            Is a table to fill in the view menu from
  169.     'detp'    kDETAspectReverseSort        Is a table listing which properties to sort in reverse order
  170.     'detw'    kDETAspectInfoPageCustomWindow    Is a specification of a custom window size/placement & whether to use the
  171.                                             page-selector (main aspect only)
  172.     'detv'    kDETAspectInfoPageCustomWindow    Is a view list which is common to all info-pages (main aspect only)
  173. }
  174.  
  175. kDETAspectCode                    =  4;
  176. kDETAspectMainBitmap            =  5;
  177. kDETAspectName                    =  6;
  178. kDETAspectCategory                =  7;
  179. kDETAspectExternalCategory        =  8;
  180. kDETAspectKind                    =  9;
  181. kDETAspectGender                = 10;
  182. kDETAspectWhatIs                = 11;
  183. kDETAspectAliasKind                = 12;
  184. kDETAspectAliasGender            = 13;
  185. kDETAspectAliasWhatIs            = 14;
  186. kDETAspectBalloons                = 15;
  187. kDETAspectNewMenuName            = 16;
  188. kDETAspectNewEntryName            = 17;
  189. kDETAspectNewValue                = 18;
  190. kDETAspectSublistOpenOnNew        = 19;
  191. kDETAspectLookup                = 20;
  192. kDETAspectDragInString            = 21;
  193. kDETAspectDragInVerb            = 22;
  194. kDETAspectDragInSummary            = 23;
  195. kDETAspectRecordDragIn            = 24;
  196. kDETAspectRecordCatDragIn        = 25;
  197. kDETAspectAttrDragIn            = 26;
  198. kDETAspectAttrDragOut            = 27;
  199. kDETAspectViewMenu                = 28;
  200. kDETAspectReverseSort            = 29;
  201. kDETAspectInfoPageCustomWindow    = 30;
  202.  
  203.  
  204. { Properties: }
  205.  
  206. kDETNoProperty                = -1;
  207.  
  208. { Each aspect has 250 attribute properties in this range: }
  209. kDETFirstLocalProperty        = 0;
  210. kDETLastLocalProperty         = (kDETFirstLocalProperty+249);
  211.  
  212. { Developers should use property numbers starting at this point: }
  213. kDETFirstDevProperty        = 40;
  214.  
  215. { The following range provides constant numeric properties for use in patterns and comparisons (constant n is
  216.   given by kDETFirstConstantProperty+n): }
  217. kDETFirstConstantProperty    = 250;
  218. kDETLastConstantProperty    = (kDETFirstConstantProperty+249);
  219.  
  220. { To convert a number into a constant property, add this: }
  221. kDETConstantProperty        = kDETFirstConstantProperty;
  222.  
  223. kDETZeroProperty            = (kDETConstantProperty+0);
  224. kDETOneProperty                = (kDETConstantProperty+1);
  225. kDETFalseProperty            = (kDETConstantProperty+0);
  226. kDETTrueProperty            = (kDETConstantProperty+1);
  227.  
  228. { The following apply to records, attributes, or aliases; they are the name and kind, as they appear in icon lists: }
  229. kDETPrName                     = 3050;
  230. kDETPrKind                     = 3051;
  231.  
  232. { Access mask properties: }
  233. kDETDNodeAccessMask            = 25825;    { The DNode access mask }
  234. kDETRecordAccessMask        = 25826;    { The record access mask }
  235. kDETAttributeAccessMask        = 25827;    { The attribute access mask }
  236. kDETPrimaryMaskByBit        = 25828;    { A set of sixteen properties to access all bits of the primary mask }
  237.  
  238. { See AOCE documentation for details definitions of each of these bits: }
  239.  
  240. kDETPrimarySeeMask            = kDETPrimaryMaskByBit;
  241. kDETPrimaryAddMask            = (kDETPrimaryMaskByBit+1);
  242. kDETPrimaryDeleteMask        = (kDETPrimaryMaskByBit+2);
  243. kDETPrimaryChangeMask        = (kDETPrimaryMaskByBit+3);
  244. kDETPrimaryRenameMask        = (kDETPrimaryMaskByBit+4);
  245. kDETPrimaryChangePrivsMask    = (kDETPrimaryMaskByBit+5);
  246. kDETPrimaryTopMaskBit        = (kDETPrimaryMaskByBit+15);
  247.  
  248. { The following property is zero until we've completed the first catalog lookup; from then on it's 1 }
  249. kDETPastFirstLookup            = 26550;
  250.  
  251. { The following property is the page number; issuing a property command with this property will flip info-pages }
  252. kDETInfoPageNumber            = 27050;
  253.  
  254. { The value of the following properties contains the template number of the targeted aspect's template, and the
  255.    currently open info-page (if any). These values can be used with kDETAspectTemplate and kDETInfoPageTemplate
  256.    target selectors. }
  257. kDETAspectTemplateNumber    = 26551;
  258. kDETInfoPageTemplateNumber    = 26552;
  259.  
  260. { Properties for property commands to deal with sublist items: }
  261. kDETOpenSelectedItems        = 26553;    { Open selected sublist items }
  262. kDETAddNewItem                = 26554;    { Add new sublist item }
  263. kDETRemoveSelectedItems        = 26555;    { Remove selected sublist items }
  264.  
  265. { Property types are used to specify types of properties and conversions between types (zero and negative numbers
  266.    are reserved for Apple; developer code resources can use positive numbers): }
  267. kDETPrTypeNumber            = -1;    { A number }
  268. kDETPrTypeString            = -2;    { A string }
  269. kDETPrTypeBinary            = -3;    { A binary block }
  270.  
  271. { Rez-compatible tag definitions (•••these are the same as in OCE.h, but they're enums there and can't be rezed•••) }
  272. {
  273. #ifdef REZ
  274. #define typeRString            'rstr'
  275. #define typePackedDSSpec    'dspc'
  276. #define typeBinary            'bnry'
  277. #endif
  278. }
  279.  
  280.  
  281. { ************************************ Info-pages }
  282.  
  283. { Info-pages include the following as well:
  284.  
  285.      Type    Offset                        Description
  286.      ----    ------                        -----------
  287.     'deti'    0                            Identifies the type of resource; see below for details on the contents
  288.     'rstr'    kDETInfoPageName            Is the name of the view to use in the page selection pop-up
  289.     'rstr'    kDETInfoPageMainViewAspect    Is the name of the aspect to use with the main page view
  290.     'rstr'    kDETInfoPageMenuName        Is the name of the catalogs menu ("Catalogs" if not present)
  291.     'detm'    kDETInfoPageMenuEntries        Are menu entries to go in the Catalogs menu
  292.  
  293. }
  294.  
  295. kDETInfoPageName            = 4;
  296. kDETInfoPageMainViewAspect    = 5;
  297. kDETInfoPageMenuName        = 6;
  298. kDETInfoPageMenuEntries        = 7;
  299.  
  300.  
  301. { ************************************ Views }
  302.  
  303. { Flags: }
  304.  
  305. kDETNoFlags                        = $0000;  {0}
  306. kDETEnabled                        = $0001;  {1 << 0}    { Main view (non-sublist) field enabled }
  307.  
  308. { The following flags make sense for items in a sublist only }
  309. kDETHilightIfSelected            = $0001;  {1 << 0}    { Hilight view when entry is selected }
  310.  
  311. { The following flags make sense for text views only }
  312. kDETNumericOnly                    = $0008;  {1 << 3}    { Only allow the user to enter digits }
  313. kDETMultiLine                    = $0010;  {1 << 4}    { Allow multiple lines in view }
  314. kDETDynamicSize                    = $0200;  {1 << 9}    { Don't draw box around text until user clicks in it, then auto-size it }
  315. kDETAllowNoColons                = $0400;  {1 << 10}    { Don't allow the user to enter colons (convert ":"s to "-"s) }
  316.  
  317. { The following flags are used for pop-up menus only }
  318. kDETPopupDynamicSize            = $0100;  {1 << 8}    { Automatically resize pop-up based on contents }
  319.  
  320. { The following flags are used for EditPicture views only }
  321. kDETScaleToView                    = $0100;  {1 << 8}    { Scale picture to view bounds rather than cropping }
  322.  
  323. {    Sizes for icons }
  324. kDETLargeIcon        = 0;
  325. kDETSmallIcon        = 1;
  326. kDETMiniIcon        = 2;
  327.  
  328. { Stolen from TextEdit.h }
  329. kDETLeft            = 0;
  330. kDETCenter            = 1;
  331. kDETRight            = -1;
  332.  
  333. { Flags for use within Box view type attributes - these are distinct from the flags above }
  334.  
  335. kDETUnused                    = 0;
  336. kDETBoxTakesContentClicks    = $0001;  {1 << 0}
  337. kDETBoxIsRounded            = $0002;  {1 << 1}
  338. kDETBoxIsGrayed                = $0004;  {1 << 2}
  339. kDETBoxIsInvisible            = $0008;  {1 << 3}
  340.  
  341. { The common font info }
  342.  
  343. kDETApplicationFont            =  1;
  344. kDETApplicationFontSize        =  9;
  345. kDETAppFontLineHeight        = 12;
  346.  
  347. kDETSystemFont                =  0;
  348. kDETSystemFontSize            = 12;
  349. kDETSystemFontLineHeight    = 16;
  350.  
  351. kDETDefaultFont                =  1;
  352. kDETDefaultFontSize            =  9;
  353. kDETDefaultFontLineHeight    = 12;
  354.  
  355. { These were taken from QuickDraw.h (where they're enums and therefore unusable in resource definitions): }
  356. kDETNormal        = 0;
  357. kDETBold        = 1;
  358. kDETItalic        = 2;
  359. kDETUnderline    = 4;
  360. kDETOutline        = 8;
  361. kDETShadow        = $10;
  362. kDETCondense    = $20;
  363. kDETExtend        = $40;
  364.  
  365. kDETIconStyle                   = -3;    { Normal text style for regular sublist entries, italic text style for aliases }
  366.  
  367. { Views menu: }
  368.  
  369. kDETChangeViewCommand        = 'view';    { Change the view; used especially in StaticCommandTextFromView sublist headers }
  370.  
  371.  
  372. { Info-page window sizes: }
  373.  
  374. { Default record info-pages: }
  375. kDETRecordInfoWindHeight        = 228;
  376. kDETRecordInfoWindWidth            = 400;
  377.  
  378. { Default attribute info-pages: }
  379. kDETAttributeInfoWindHeight        = 250;
  380. kDETAttributeInfoWindWidth        = 230;
  381.  
  382. { Page identifying icon (for default info-page layout): }
  383. kDETSubpageIconTop        = 8;
  384. kDETSubpageIconLeft        = 8;
  385. kDETSubpageIconBottom    = (kDETSubpageIconTop+32);
  386. kDETSubpageIconRight    = (kDETSubpageIconLeft+32);
  387. (* #define kDETSubpageIconRect        = {kDETSubpageIconTop, kDETSubpageIconLeft, kDETSubpageIconBottom, kDETSubpageIconRight} *)
  388.  
  389. { The following rectangle can be used in a 'deti' with no sublist: }
  390. (* #define kDETNoSublistRect        {0, 0, 0, 0} *)
  391.  
  392.  
  393.  
  394. { ************************************ Killers }
  395.  
  396. { Killers include the following as well:
  397.  
  398.      Type    Offset                        Description
  399.      ----    ------                        -----------
  400.     'detk'    0                            Identifies the type of resource; see below for details on the contents
  401.     'rst#'    kDETKillerName                Contains a list of template names to be killed
  402.  
  403. }
  404.  
  405. kDETKillerName = 1;
  406.  
  407.  
  408. { ************************************ Forwarders }
  409.  
  410. { Forwarders include the following as well:
  411.  
  412.      Type    Offset                        Description
  413.      ----    ------                        -----------
  414.     'detf'    0                            Identifies the type of resource; see below for details on the contents
  415.     'rst#'    kDETForwarderTemplateNames    Contains a list of names of templates to forward to
  416.  
  417. }
  418.  
  419. kDETForwarderTemplateNames    = 4;
  420.  
  421.  
  422.  
  423. {*********************************************************************************}
  424. {******************************** Categories: ************************************}
  425. {*********************************************************************************}
  426.  
  427. { Internal category names: }
  428.  
  429. kDETCategoryAllItems        = 'aoce All Items';            { Everything in or out of a category }
  430. kDETCategoryAddressItems    = 'aoce Address Items';        { Anything that can be used to address something }
  431. kDETCategoryMisc            = 'aoce Miscellaneous';        { Things that don't deserve their own category }
  432.  
  433.  
  434.  
  435.  
  436.  
  437. {*********************************************************************************}
  438. {******************************** Code Resources: ********************************}
  439. {*********************************************************************************}
  440.  
  441. { Target specification: }
  442.  
  443. { Values of DETTargetSelector }
  444. kDETSelf = 0;                            { The "current" item }
  445. kDETSelfOtherAspect = 1;                { Another aspect of the current item }
  446. kDETParent = 2;                            { The parent (i.e., the aspect we're in the sublist of, if any) of the current item }
  447. kDETSublistItem = 3;                    { The itemNumberth item in the sublist }
  448. kDETSelectedSublistItem = 4;            { The itemNumberth selected item in the sublist }
  449. kDETDSSpec = 5;                            { The item specified by the packed DSSpec }
  450. kDETAspectTemplate = 6;                    { A specific aspect template (number itemNumber) }
  451. kDETInfoPageTemplate = 7;                { A specific info-page template (number itemNumber) }
  452. kDETHighSelector = $F000;                { Force type to be INTEGER }
  453.  
  454. TYPE
  455. DETTargetSelector = INTEGER;
  456.  
  457. DETTargetSpecification = RECORD
  458.     selector: DETTargetSelector;        { Target selection method (see above) }
  459.     aspectName: RStringPtr;                { The name of the aspect (kDETSelfOtherAspect, kDETSublistItem,
  460.                                           kDETSelectedSublistItem, kDETDSSpec); nil for main aspect or none;
  461.                                           always filled in for calls if there is an aspect, even if it's the main aspect }
  462.     itemNumber: LONGINT;                { Sublist index (kDETSublistItem & kDETSelectedSublistItem & kDETAspectTemplate);
  463.                                           1-based indexing }
  464.     dsSpec: PackedDSSpecPtr;            { DSSpec (kDETDSSpec only) }
  465.     END;
  466.  
  467.  
  468. { Code resource calls and call-backs both return an OSType:
  469.         kDETDidNotHandle (1)    = used by template to say "I didn't handle it" (for calls only)
  470.         noErr                    = function completed successfully
  471.         any error                = function failed, and here's why
  472. }
  473.  
  474. CONST
  475. kDETDidNotHandle = 1;
  476.  
  477. { Call-back functions:
  478.  
  479.         reqFunction                            Action
  480.         -----------                            ------
  481.         kDETcmdBeep                            Call SysBeep; useful for testing that a code resource's calls/call-backs are working at all
  482.  
  483.         kDETcmdBusy                            Put up watch cursor and switch processes; user events elicit a beep
  484.  
  485.         kDETcmdChangeCallFors                Change call-fors mask
  486.  
  487.         kDETcmdGetCommandSelectionCount        Get the command selection count (for calls which have a command selection list)
  488.         kDETcmdGetCommandItemN                Get command selection item n (for calls which have a command selection list)
  489.  
  490.         kDETcmdOpenDSSpec                    PackedDSSpec open (can also be done via AppleEvents -- this is a short-cut)
  491.  
  492.         kDETcmdAboutToTalk                    About to talk to user: bring us to front, disable watch cursor, etc.
  493.  
  494.         kDETcmdUnloadTemplates                Flush templates
  495.  
  496.         kDETcmdTemplateCounts                Return number of aspect and info-page templates in system
  497.  
  498.         kDETcmdGetDSSpec                    Get the PackedDSSpec for this object
  499.  
  500.         kDETcmdSublistCount                    Return the count of the sublist items
  501.         kDETcmdSelectedSublistCount            Return the count of the selected sublist items
  502.  
  503.         kDETcmdRequestSync                    Request a sync-up of the aspect with the catalog
  504.  
  505.         kDETcmdBreakAttribute                Break an attribute -- apply all applicable patterns to an attribute to generate properties
  506.  
  507.         kDETcmdGetTemplateFSSpec            Get the FSSpec of the file containing the template
  508.  
  509.         kDETcmdGetOpenEdit                    Return the property of the view being edited (or kDETNoProperty if none)
  510.         kDETcmdCloseEdit                    Close the current edit
  511.  
  512.         kDETcmdGetPropertyType                Get a property type
  513.  
  514.         kDETcmdGetPropertyNumber            Get a property, number format
  515.         kDETcmdGetPropertyRString            Get a property, RString format
  516.         kDETcmdGetPropertyBinarySize        Get a property, binary, return size
  517.         kDETcmdGetPropertyBinary            Get a property, binary format
  518.  
  519.         kDETcmdGetPropertyChanged            Get a property changed flag
  520.         kDETcmdGetPropertyEditable            Get a property editable flag
  521.  
  522.         kDETcmdSetPropertyType                Set a property type
  523.  
  524.         kDETcmdSetPropertyNumber            Set a property, number format
  525.         kDETcmdSetPropertyRString            Set a property, RString format
  526.         kDETcmdSetPropertyBinary            Set a property, binary data & size
  527.  
  528.         kDETcmdSetPropertyChanged            Set a property changed flag
  529.         kDETcmdSetPropertyEditable            Set a property editable flag
  530.  
  531.         kDETcmdDirtyProperty                Dirty a property (notify other code resources of change)
  532.  
  533.         kDETcmdDoPropertyCommand            Issue a property command
  534.  
  535.         kDETcmdAddMenu                        Add to the end of a dynamic menu
  536.         kDETcmdRemoveMenu                    Remove a dynamic menu item
  537.         kDETcmdMenuItemRString                Get a dynamic menu item RString
  538.  
  539.         kDETcmdSaveProperty                    Force a save of a property -- apply all applicable patterns to write out the property
  540.  
  541.         kDETcmdGetCustomViewUserReference    Get custom view user reference (as given in .r file)
  542.         kDETcmdGetCustomViewBounds            Get custom view current bounds
  543.  
  544.         kDETcmdGetResource                    Get a resource from a template
  545. }
  546.  
  547.  
  548. {Values of DETCallBackFunctions }
  549. kDETcmdSimpleCallback = 0;
  550. kDETcmdBeep = 1;
  551. kDETcmdBusy = 2;
  552. kDETcmdChangeCallFors = 3;
  553. kDETcmdGetCommandSelectionCount = 4;
  554. kDETcmdGetCommandItemN = 5;
  555. kDETcmdOpenDSSpec = 6;
  556. kDETcmdAboutToTalk = 7;
  557. kDETcmdUnloadTemplates = 8;
  558. kDETcmdTemplateCounts = 9;
  559.  
  560. kDETcmdTargetedCallback = 1000;
  561. kDETcmdGetDSSpec = 1001;
  562. kDETcmdSublistCount = 1002;
  563. kDETcmdSelectedSublistCount = 1003;
  564. kDETcmdRequestSync = 1004;
  565. kDETcmdBreakAttribute = 1005;
  566. kDETcmdGetTemplateFSSpec = 1006;
  567. kDETcmdGetOpenEdit = 1007;
  568. kDETcmdCloseEdit = 1008;
  569.  
  570. kDETcmdPropertyCallback = 2000;
  571. kDETcmdGetPropertyType = 2001;
  572. kDETcmdGetPropertyNumber = 2002;
  573. kDETcmdGetPropertyRString = 2003;
  574. kDETcmdGetPropertyBinarySize = 2004;
  575. kDETcmdGetPropertyBinary = 2005;
  576. kDETcmdGetPropertyChanged = 2006;
  577. kDETcmdGetPropertyEditable = 2007;
  578. kDETcmdSetPropertyType = 2008;
  579. kDETcmdSetPropertyNumber = 2009;
  580. kDETcmdSetPropertyRString = 2010;
  581. kDETcmdSetPropertyBinary = 2011;
  582. kDETcmdSetPropertyChanged = 2012;
  583. kDETcmdSetPropertyEditable = 2013;
  584. kDETcmdDirtyProperty = 2014;
  585. kDETcmdDoPropertyCommand = 2015;
  586. kDETcmdAddMenu = 2016;
  587. kDETcmdRemoveMenu = 2017;
  588. kDETcmdMenuItemRString = 2018;
  589. kDETcmdSaveProperty = 2019;
  590. kDETcmdGetCustomViewUserReference = 2020;
  591. kDETcmdGetCustomViewBounds = 2021;
  592. kDETcmdGetResource = 2022;
  593.  
  594. kDETcmdHighCallback = $F0000000;        { Force type to be LONGINT }
  595.  
  596. TYPE
  597. DETCallBackFunctions = LONGINT;
  598.  
  599.  
  600. DETCallBackBlockHeader = RECORD
  601.     reqFunction: DETCallBackFunctions;    { Requested function }
  602.     END;
  603.  
  604. DETCallBackBlockTargetedHeader = RECORD
  605.     reqFunction: DETCallBackFunctions;    { Requested function }
  606.     target: DETTargetSpecification;        { The target for the request }
  607.     END;
  608.  
  609. DETCallBackBlockPropertyHeader = RECORD
  610.     reqFunction: DETCallBackFunctions;    { Requested function }
  611.     target: DETTargetSpecification;        { The target for the request }
  612.     property: INTEGER;                    { The property to apply the request to }
  613.     END;
  614.  
  615.  
  616. DETProtoCallBackBlock = DETCallBackBlockPropertyHeader;
  617.     
  618.  
  619. DETBeepBlock = DETCallBackBlockHeader;
  620.  
  621.  
  622. DETBusyBlock = DETCallBackBlockHeader;
  623.  
  624.  
  625. DETChangeCallForsBlock = RECORD
  626.     reqFunction: DETCallBackFunctions;    { Requested function }
  627.     target: DETTargetSpecification;        { The target for the request }
  628.  
  629.     newCallFors: LONGINT;                {  -> New call-for mask }
  630.     END;
  631.  
  632.  
  633. DETGetCommandSelectionCountBlock = RECORD
  634.     reqFunction: DETCallBackFunctions;    { Requested function }
  635.  
  636.     count: LONGINT;                        { <-  The number of items in the command selection list }
  637.     END;
  638.  
  639.  
  640. CONST
  641. {Values of DETItemType }
  642. kDETHFSType = 0;                        { HFS item type }
  643. kDETDSType = 1;                            { Catalog Service item type }
  644. kDETMailType = 2;                        { Mail (letter) item type }
  645. kDETMoverType = 3;                        { Sounds, fonts, etc., from inside a suitcase or system file }
  646. kDETLastItemType = $F0000000;            { Force it to be a LONGINT (C & C++ seem to disagree about the definition of $F000) }
  647.  
  648. TYPE
  649. DETItemType = LONGINT;
  650.  
  651.  
  652.  
  653. DETFSInfo = RECORD                        { FSSpec plus possibly interesting additional info }
  654.     fileType: OSType;                    { File type }
  655.     fileCreator: OSType;                { File creator }
  656.     fdFlags: INTEGER;                    { Finder flags }
  657.     fsSpec: FSSpec;                        { FSSpec }
  658.     END;
  659.  
  660. DETFSInfoPtr = ^DETFSInfo;
  661.  
  662. LetterSpecPtr = ^LetterSpec;
  663. LetterSpecHandle = ^LetterSpecPtr;
  664.  
  665. DETGetCommandItemNBlock = RECORD
  666.     reqFunction: DETCallBackFunctions;    { Requested function }
  667.  
  668.     itemNumber: LONGINT;                {  -> Item number to retrieve (1-based) }
  669.     itemType: DETItemType;                {  -> Type of item to be returned (if we can interpret it as such) }
  670.     CASE INTEGER OF
  671.         1: (fsInfo: ^DETFSInfoPtr);        { <-  FSSpec & info for item (caller must DisposHandle() when done) }
  672.         2: (ds: RECORD
  673.             dsSpec: ^PackedDSSpecPtr;    { <-  DSSpec for item (caller must DisposHandle() when done) }
  674.             refNum: INTEGER;            { <-  Refnum for returned address }
  675.             identity: AuthIdentity;        { <-  Identity for returned address }
  676.             END);
  677.  
  678.         3: (dsSpec: ^PackedDSSpecPtr);    { <-  DSSpec for item (caller must DisposHandle() when done) }
  679.         4: (ltrSpec: LetterSpecHandle);    { <-  Letter spec for item (caller must DisposHandle() when done) }
  680.     END;
  681.  
  682.  
  683. DETGetDSSpecBlock = RECORD
  684.     reqFunction: DETCallBackFunctions;    { Requested function }
  685.     target: DETTargetSpecification;        { The target for the request }
  686.  
  687.     dsSpec: ^PackedDSSpecPtr;            { <-  Handle with result (caller must DisposHandle() when done) }
  688.     refNum: INTEGER;                    { <-  Refnum for address if PD }
  689.     identity: AuthIdentity;                { <-  Identity for address }
  690.     isAlias: BOOLEAN;                    { <-  True if this entry is an alias }
  691.     isRecordRef: BOOLEAN;                { <-  True if this entry is a record reference (reserved) }
  692.     END;
  693.  
  694.  
  695. DETGetTemplateFSSpecBlock = RECORD
  696.     reqFunction: DETCallBackFunctions;    { Requested function }
  697.     target: DETTargetSpecification;        { The target for the request }
  698.  
  699.     fsSpec: FSSpec;                        { <-  FSSpec of template file }
  700.     baseID: INTEGER;                    { <-  Base ID of this template }
  701.     aspectTemplateNumber: LONGINT;        { <-  The template number for this aspect template }
  702.     END;
  703.  
  704. DETGetOpenEditBlock = RECORD
  705.     reqFunction: DETCallBackFunctions;    { Requested function }
  706.     target: DETTargetSpecification;        { The target for the request }
  707.  
  708.     viewProperty: INTEGER;                { <- The property of the view being edited (or kNoProperty if none) }
  709.     END;
  710.  
  711. DETCloseEditBlock = RECORD
  712.     reqFunction: DETCallBackFunctions;    { Requested function }
  713.     target: DETTargetSpecification;        { The target for the request }
  714.  
  715.     END;
  716.  
  717. DETGetPropertyTypeBlock = RECORD
  718.     reqFunction: DETCallBackFunctions;    { Requested function }
  719.     target: DETTargetSpecification;        { The target for the request }
  720.     property: INTEGER;                    { The property to apply the request to }
  721.  
  722.     propertyType: INTEGER;                { <-  The type of the property }
  723.     END;
  724.  
  725.  
  726. DETGetPropertyNumberBlock = RECORD
  727.     reqFunction: DETCallBackFunctions;    { Requested function }
  728.     target: DETTargetSpecification;        { The target for the request }
  729.     property: INTEGER;                    { The property to apply the request to }
  730.  
  731.     propertyValue: LONGINT;                { <-  The value of the property }
  732.     END;
  733.  
  734.  
  735. DETGetPropertyRStringBlock = RECORD
  736.     reqFunction: DETCallBackFunctions;    { Requested function }
  737.     target: DETTargetSpecification;        { The target for the request }
  738.     property: INTEGER;                    { The property to apply the request to }
  739.  
  740.     propertyValue: RStringHandle;        { <-  A handle containing the property (as an RString) (caller must DisposHandle() when done) }
  741.     END;
  742.  
  743.  
  744. DETGetPropertyBinarySizeBlock = RECORD
  745.     reqFunction: DETCallBackFunctions;    { Requested function }
  746.     target: DETTargetSpecification;        { The target for the request }
  747.     property: INTEGER;                    { The property to apply the request to }
  748.  
  749.     propertyBinarySize: LONGINT;        { <-  The size of the property as a binary block }
  750.     END;
  751.  
  752.  
  753. DETGetPropertyBinaryBlock = RECORD
  754.     reqFunction: DETCallBackFunctions;    { Requested function }
  755.     target: DETTargetSpecification;        { The target for the request }
  756.     property: INTEGER;                    { The property to apply the request to }
  757.  
  758.     propertyValue: Handle;                { <-  Handle with the value of the property (caller must DisposHandle() when done) }
  759.     END;
  760.  
  761.  
  762. DETGetPropertyChangedBlock = RECORD
  763.     reqFunction: DETCallBackFunctions;    { Requested function }
  764.     target: DETTargetSpecification;        { The target for the request }
  765.     property: INTEGER;                    { The property to apply the request to }
  766.  
  767.     propertyChanged: BOOLEAN;            { <-  True if the property is marked as changed }
  768.     END;
  769.  
  770.  
  771. DETGetPropertyEditableBlock = RECORD
  772.     reqFunction: DETCallBackFunctions;    { Requested function }
  773.     target: DETTargetSpecification;        { The target for the request }
  774.     property: INTEGER;                    { The property to apply the request to }
  775.  
  776.     propertyEditable: BOOLEAN;            { <-  True if the property can be edited by the user (if false, view will appear disabled) }
  777.     END;
  778.  
  779.  
  780. DETSetPropertyTypeBlock = RECORD
  781.     reqFunction: DETCallBackFunctions;    { Requested function }
  782.     target: DETTargetSpecification;        { The target for the request }
  783.     property: INTEGER;                    { The property to apply the request to }
  784.  
  785.     newType: INTEGER;                    {  -> New type for property (just sets type, does not convert contents) }
  786.     END;
  787.  
  788.  
  789. DETSetPropertyNumberBlock = RECORD
  790.     reqFunction: DETCallBackFunctions;    { Requested function }
  791.     target: DETTargetSpecification;        { The target for the request }
  792.     property: INTEGER;                    { The property to apply the request to }
  793.  
  794.     newValue: LONGINT;                    {  -> New value to set property to (and set type to number) }
  795.     END;
  796.  
  797.  
  798. DETSetPropertyRStringBlock = RECORD
  799.     reqFunction: DETCallBackFunctions;    { Requested function }
  800.     target: DETTargetSpecification;        { The target for the request }
  801.     property: INTEGER;                    { The property to apply the request to }
  802.  
  803.     newValue: RStringPtr;                {  -> New value to set property to (and set type to RString) }
  804.     END;
  805.  
  806.  
  807. DETSetPropertyBinaryBlock = RECORD
  808.     reqFunction: DETCallBackFunctions;    { Requested function }
  809.     target: DETTargetSpecification;        { The target for the request }
  810.     property: INTEGER;                    { The property to apply the request to }
  811.  
  812.     newValue: Ptr;                        {  -> New value to set property to (and set type to binary) }
  813.     newValueSize: LONGINT;                {  -> Size of new value }
  814.     END;
  815.  
  816.  
  817. DETSetPropertyChangedBlock = RECORD
  818.     reqFunction: DETCallBackFunctions;    { Requested function }
  819.     target: DETTargetSpecification;        { The target for the request }
  820.     property: INTEGER;                    { The property to apply the request to }
  821.  
  822.     propertyChanged: BOOLEAN;            {  -> Value to set changed flag on property to }
  823.     END;
  824.  
  825.  
  826. DETSetPropertyEditableBlock = RECORD
  827.     reqFunction: DETCallBackFunctions;    { Requested function }
  828.     target: DETTargetSpecification;        { The target for the request }
  829.     property: INTEGER;                    { The property to apply the request to }
  830.  
  831.     propertyEditable: BOOLEAN;            {  -> Value to set editable flag on property to }
  832.     END;
  833.  
  834.  
  835. DETDirtyPropertyBlock = DETCallBackBlockPropertyHeader;
  836.  
  837.  
  838. DETDoPropertyCommandBlock = RECORD
  839.     reqFunction: DETCallBackFunctions;    { Requested function }
  840.     target: DETTargetSpecification;        { The target for the request }
  841.     property: INTEGER;                    { The property to apply the request to }
  842.  
  843.     parameter: LONGINT;                    { ->  Parameter of command }
  844.     END;
  845.  
  846.  
  847. DETSublistCountBlock = RECORD
  848.     reqFunction: DETCallBackFunctions;    { Requested function }
  849.     target: DETTargetSpecification;        { The target for the request }
  850.  
  851.     count: LONGINT;                        { <-  The number of items in the current item's sublist }
  852.     END;
  853.  
  854.  
  855. DETSelectedSublistCountBlock = RECORD
  856.     reqFunction: DETCallBackFunctions;    { Requested function }
  857.     target: DETTargetSpecification;        { The target for the request }
  858.  
  859.     count: LONGINT;                        { <-  The number of selected items in the current item's sublist }
  860.     END;
  861.  
  862.  
  863. DETRequestSyncBlock =  DETCallBackBlockTargetedHeader;
  864.  
  865.  
  866. DETAddMenuBlock = RECORD
  867.     reqFunction: DETCallBackFunctions;    { Requested function }
  868.     target: DETTargetSpecification;        { The target for the request }
  869.     property: INTEGER;                    { The property to apply the request to }
  870.  
  871.     name: ^RString;                        {  -> Name of new menu item }
  872.     parameter: LONGINT;                    {  -> Parameter to return when this item is selected }
  873.     addAfter: LONGINT;                    {  -> Parameter of entry to add after, or -1 for add at end }
  874.     END;
  875.  
  876.  
  877. DETRemoveMenuBlock = RECORD
  878.     reqFunction: DETCallBackFunctions;    { Requested function }
  879.     target: DETTargetSpecification;        { The target for the request }
  880.     property: INTEGER;                    { The property to apply the request to }
  881.  
  882.     itemToRemove: LONGINT;                {  -> Parameter of menu item to remove }
  883.     END;
  884.  
  885.  
  886. DETMenuItemRStringBlock = RECORD
  887.     reqFunction: DETCallBackFunctions;    { Requested function }
  888.     target: DETTargetSpecification;        { The target for the request }
  889.     property: INTEGER;                    { The property to apply the request to }
  890.  
  891.     itemParameter: LONGINT;                {  -> Parameter of menu item to return string for }
  892.     rString: RStringHandle;                { <-  Handle with the RString (caller must DisposHandle() when done) }
  893.     END;
  894.  
  895.  
  896. DETOpenDSSpecBlock = RECORD
  897.     reqFunction: DETCallBackFunctions;    { Requested function }
  898.  
  899.     dsSpec: PackedDSSpecPtr;            {  -> DSSpec of object to be opened }
  900.     END;
  901.  
  902.  
  903. DETAboutToTalkBlock = DETCallBackBlockHeader;
  904.  
  905.  
  906. DETBreakAttributeBlock = RECORD
  907.     reqFunction: DETCallBackFunctions;    { Requested function }
  908.     target: DETTargetSpecification;        { The target for the request }
  909.  
  910.     breakAttribute: AttributePtr;        {  -> Attribute to parse }
  911.     isChangeable: BOOLEAN;                {  -> True if the value can be changed by the user }
  912.     END;
  913.  
  914.  
  915. DETSavePropertyBlock = DETCallBackBlockPropertyHeader;
  916.  
  917.  
  918. DETGetCustomViewUserReferenceBlock = RECORD
  919.     reqFunction: DETCallBackFunctions;    { Requested function }
  920.     target: DETTargetSpecification;        { The target for the request }
  921.     property: INTEGER;                    { The property to apply the request to }
  922.  
  923.     userReference: INTEGER;                { <-  User reference value, as specified in the .r file }
  924.     END;
  925.  
  926.  
  927. DETGetCustomViewBoundsBlock = RECORD
  928.     reqFunction: DETCallBackFunctions;    { Requested function }
  929.     target: DETTargetSpecification;        { The target for the request }
  930.     property: INTEGER;                    { The property to apply the request to }
  931.  
  932.     bounds: Rect;                        { <-  Bounds of the view }
  933.     END;
  934.  
  935.  
  936. DETGetResourceBlock = RECORD
  937.     reqFunction: DETCallBackFunctions;    { Requested function }
  938.     target: DETTargetSpecification;        { The target for the request }
  939.     property: INTEGER;                    { The property to apply the request to }
  940.  
  941.     resourceType: ResType;                {  -> Resource type }
  942.     theResource: Handle;                { <-  The resource handle (caller must dispose when done) }
  943.     END;
  944.  
  945. DETTemplateCounts = RECORD
  946.     reqFunction: DETCallBackFunctions;    { Requested function }
  947.  
  948.     aspectTemplateCount: LONGINT;        { <-  Number of aspect templates in the system }
  949.     infoPageTemplateCount: LONGINT;        { <-  Number of info-page templates in the system }
  950.     END;
  951.  
  952.  
  953. DETUnloadTemplatesBlock = DETCallBackBlockHeader;
  954.  
  955.  
  956.  
  957. DETCallBackBlock = RECORD
  958.     CASE INTEGER OF
  959.         1: (protoCallBack: DETProtoCallBackBlock);
  960.         2: (beep: DETBeepBlock);
  961.         3: (busy: DETBusyBlock);
  962.         4: (changeCallFors: DETChangeCallForsBlock);
  963.         5: (getCommandSelectionCount: DETGetCommandSelectionCountBlock);
  964.         6: (getCommandItemN: DETGetCommandItemNBlock);
  965.         7: (getDSSpec: DETGetDSSpecBlock);
  966.         8: (getTemplateFSSpec: DETGetTemplateFSSpecBlock);
  967.         9: (getOpenEdit: DETGetOpenEditBlock);
  968.         10: (closeEdit: DETCloseEditBlock);
  969.         11: (getPropertyType: DETGetPropertyTypeBlock);
  970.         12: (getPropertyNumber: DETGetPropertyNumberBlock);
  971.         13: (getPropertyRString: DETGetPropertyRStringBlock);
  972.         14: (getPropertyBinarySize: DETGetPropertyBinarySizeBlock);
  973.         15: (getPropertyBinary: DETGetPropertyBinaryBlock);
  974.         16: (getPropertyChanged: DETGetPropertyChangedBlock);
  975.         17: (getPropertyEditable: DETGetPropertyEditableBlock);
  976.         18: (setPropertyType: DETSetPropertyTypeBlock);
  977.         19: (setPropertyNumber: DETSetPropertyNumberBlock);
  978.         20: (setPropertyRString: DETSetPropertyRStringBlock);
  979.         21: (setPropertyBinary: DETSetPropertyBinaryBlock);
  980.         22: (setPropertyChanged: DETSetPropertyChangedBlock);
  981.         23: (setPropertyEditable: DETSetPropertyEditableBlock);
  982.         24: (dirtyProperty: DETDirtyPropertyBlock);
  983.         25:    (doPropertyCommand: DETDoPropertyCommandBlock);
  984.         26: (sublistCount: DETSublistCountBlock);
  985.         27: (selectedSublistCount: DETSelectedSublistCountBlock);
  986.         28: (requestSync: DETRequestSyncBlock);
  987.         29: (addMenu: DETAddMenuBlock);
  988.         30: (removeMenu: DETRemoveMenuBlock);
  989.         31: (menuItemRString: DETMenuItemRStringBlock);
  990.         32: (openDSSpec: DETOpenDSSpecBlock);
  991.         33: (aboutToTalk: DETAboutToTalkBlock);
  992.         34: (breakAttribute: DETBreakAttributeBlock);
  993.         35: (saveProperty: DETSavePropertyBlock);
  994.         36: (getCustomViewUserReference: DETGetCustomViewUserReferenceBlock);
  995.         37: (getCustomViewBounds: DETGetCustomViewBoundsBlock);
  996.         38: (getResource: DETGetResourceBlock);
  997.         39: (templateCounts: DETTemplateCounts);
  998.         40: (unloadTemplates: DETUnloadTemplatesBlock);
  999.     END;
  1000.  
  1001. DETCallBackBlockPtr = ^DETCallBackBlock;
  1002.  
  1003.  
  1004. DETCallBack = ProcPtr;
  1005.     { FUNCTION DETCallBack(
  1006.         callBlockPtr: ^DETCallBlock; callBackBlockPtr: DETCallBackBlockPtr): OSErr; }
  1007.  
  1008.  
  1009. { Call functions:
  1010.  
  1011.         reqFunction                        Action
  1012.         -----------                        ------
  1013.         kDETcmdInit                        Called once when template is first loaded (good time to allocate private data); returns call-for list
  1014.         kDETcmdExit                        Called once when template is freed (good time to free private data)
  1015.  
  1016.         kDETcmdAttributeCreation        New sublist attribute creation about to occur; this gives the template a chance to modify
  1017.                                         the value that's about to be created; sent to the template that will be used for
  1018.                                         the main aspect of the new entry
  1019.  
  1020.         kDETcmdDynamicForwarders        Return a list of dynamically created forwarders
  1021.  
  1022.         kDETcmdInstanceInit                Called once when instance of template is started (good time to allocate private instance data)
  1023.         kDETcmdInstanceExit                Called once when instance is ended (good time to free private instance data)
  1024.  
  1025.         kDETcmdIdle                        Called periodically during idle times
  1026.  
  1027.         kDETcmdViewListChanged            Called when the info-page view-list (list of enabled views) has changed
  1028.  
  1029.         kDETcmdValidateSave                Validate save: about to save info-page, return noErr (or kDETDidNotHandle) if it's OK to do so
  1030.  
  1031.         kDETcmdDropQuery                Drop query: return the appropriate operation for this drag; ask destination
  1032.         kDETcmdDropMeQuery                Drop query: return the appropriate operation for this drag; ask dropee
  1033.  
  1034.         kDETcmdAttributeNew                Attribute value new (return kDETDidNotHandle to let normal new processing occur)
  1035.         kDETcmdAttributeChange            Attribute value change (return kDETDidNotHandle to let normal change processing occur)
  1036.         kDETcmdAttributeDelete            Attribute value delete (return kDETDidNotHandle to let normal deletion occur); sent to the
  1037.                                         main aspect of the attribute that's about to be deleted
  1038.         kDETcmdItemNew                    Target item (record or attribute) has just been created
  1039.  
  1040.         kDETcmdOpenSelf                    Self open (return noErr to prevent opening; return kDETDidNotHandle to allow it)
  1041.  
  1042.         kDETcmdDynamicResource            Return a dynamically created resource
  1043.  
  1044.         kDETcmdShouldSync                Check if the code resource wants to force a sync (update data from catalog)
  1045.         kDETcmdDoSync                    Give code resource a chance to sync (read in and break all attributes)
  1046.  
  1047.         kDETcmdPropertyCommand            Command received in the property number range (usually means a button's been pushed)
  1048.  
  1049.         kDETcmdMaximumTextLength        Return maximum size for text form of property
  1050.  
  1051.         kDETcmdPropertyDirtied            Property dirtied, need to redraw
  1052.  
  1053.         kDETcmdPatternIn                Custom pattern element encountered on reading in an attribute
  1054.         kDETcmdPatternOut                Custom pattern element encountered on writing out an attribute
  1055.  
  1056.         kDETcmdConvertToNumber            Convert from template-defined property type to number
  1057.         kDETcmdConvertToRString            Convert from template-defined property type to RString
  1058.         kDETcmdConvertFromNumber        Convert from number to template-defined property type
  1059.         kDETcmdConvertFromRString        Convert from RString to template-defined property type
  1060.  
  1061.         kDETcmdCustomViewDraw            Custom view draw
  1062.         kDETcmdCustomViewMouseDown        Custom view mouse down
  1063.  
  1064.         kDETcmdKeyPress                    Key press (used primarily to filter entry into EditText views)
  1065.         kDETcmdPaste                    Paste (used primarily to filter entry into EditText views)
  1066.  
  1067.         kDETcmdCustomMenuSelected        Custom Catalogs menu selected
  1068.         kDETcmdCustomMenuEnabled        Return whether custom Catalogs menu entry should be enabled
  1069. }
  1070.  
  1071.  
  1072. CONST
  1073. { Values of DETCallFunctions }
  1074. kDETcmdSimpleCall = 0;
  1075. kDETcmdInit = 1;
  1076. kDETcmdExit = 2;
  1077. kDETcmdAttributeCreation = 3;
  1078. kDETcmdDynamicForwarders = 4;
  1079.  
  1080. kDETcmdTargetedCall = 1000;
  1081. kDETcmdInstanceInit = 1001;
  1082. kDETcmdInstanceExit = 1002;
  1083. kDETcmdIdle = 1003;
  1084. kDETcmdViewListChanged = 1004;
  1085. kDETcmdValidateSave = 1005;
  1086. kDETcmdDropQuery = 1006;
  1087. kDETcmdDropMeQuery = 1007;
  1088. kDETcmdAttributeNew = 1008;
  1089. kDETcmdAttributeChange = 1009;
  1090. kDETcmdAttributeDelete = 1010;
  1091. kDETcmdItemNew = 1011;
  1092. kDETcmdOpenSelf = 1012;
  1093. kDETcmdDynamicResource = 1013;
  1094. kDETcmdShouldSync = 1014;
  1095. kDETcmdDoSync = 1015;
  1096.  
  1097. kDETcmdPropertyCall = 2000;
  1098. kDETcmdPropertyCommand = 2001;
  1099. kDETcmdMaximumTextLength = 2002;
  1100. kDETcmdPropertyDirtied = 2003;
  1101. kDETcmdPatternIn = 2004;
  1102. kDETcmdPatternOut = 2005;
  1103. kDETcmdConvertToNumber = 2006;
  1104. kDETcmdConvertToRString = 2007;
  1105. kDETcmdConvertFromNumber = 2008;
  1106. kDETcmdConvertFromRString = 2009;
  1107. kDETcmdCustomViewDraw = 2010;
  1108. kDETcmdCustomViewMouseDown = 2011;
  1109. kDETcmdKeyPress = 2012;
  1110. kDETcmdPaste = 2013;
  1111. kDETcmdCustomMenuSelected = 2014;
  1112. kDETcmdCustomMenuEnabled = 2015;
  1113.  
  1114. kDETcmdHighCall = $F0000000;    { Force the type to be long }
  1115.  
  1116. TYPE
  1117. DETCallFunctions = LONGINT;
  1118.  
  1119.  
  1120. DETCallBlockHeader = RECORD
  1121.     reqFunction: DETCallFunctions;        { Requested function }
  1122.     callBack: DETCallBack;                { Pointer to call-back routine }
  1123.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1124.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1125.                                             common to all invocations of code resource) }
  1126.     END;
  1127.  
  1128. DETCallBlockTargetedHeader = RECORD
  1129.     reqFunction: DETCallFunctions;        { Requested function }
  1130.     callBack: DETCallBack;                { Pointer to call-back routine }
  1131.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1132.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1133.                                             common to all invocations of code resource) }
  1134.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1135.                                             code resource) }
  1136.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1137.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1138.     END;
  1139.     
  1140. DETCallBlockPropertyHeader = RECORD
  1141.     reqFunction: DETCallFunctions;        { Requested function }
  1142.     callBack: DETCallBack;                { Pointer to call-back routine }
  1143.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1144.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1145.                                             common to all invocations of code resource) }
  1146.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1147.                                             code resource) }
  1148.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1149.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1150.     property: INTEGER;                    { The property number the call refers to }
  1151.     END;
  1152.  
  1153. DETProtoCallBlock = DETCallBlockPropertyHeader;
  1154.  
  1155.  
  1156. DETInitBlock = RECORD
  1157.     reqFunction: DETCallFunctions;        { Requested function }
  1158.     callBack: DETCallBack;                { Pointer to call-back routine }
  1159.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1160.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1161.                                             common to all invocations of code resource) }
  1162.  
  1163.     newCallFors: LONGINT;                { <-  New call-for mask }
  1164.     END;
  1165.  
  1166.  
  1167. DETExitBlock = DETCallBlockHeader;
  1168.  
  1169.  
  1170. DETInstanceInitBlock = DETCallBlockTargetedHeader;
  1171.  
  1172.  
  1173. DETInstanceExitBlock = DETCallBlockTargetedHeader;
  1174.  
  1175.  
  1176. DETInstanceIdleBlock = DETCallBlockTargetedHeader;
  1177.  
  1178.  
  1179. DETPropertyCommandBlock = RECORD
  1180.     reqFunction: DETCallFunctions;        { Requested function }
  1181.     callBack: DETCallBack;                { Pointer to call-back routine }
  1182.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1183.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1184.                                             common to all invocations of code resource) }
  1185.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1186.                                             code resource) }
  1187.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1188.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1189.     property: INTEGER;                    { The property number the call refers to }
  1190.  
  1191.     parameter: LONGINT;                    {  -> Parameter of command }
  1192.     END;
  1193.  
  1194.  
  1195. DETMaximumTextLengthBlock = RECORD
  1196.     reqFunction: DETCallFunctions;        { Requested function }
  1197.     callBack: DETCallBack;                { Pointer to call-back routine }
  1198.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1199.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1200.                                             common to all invocations of code resource) }
  1201.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1202.                                             code resource) }
  1203.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1204.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1205.     property: INTEGER;                    { The property number the call refers to }
  1206.  
  1207.     maxSize: LONGINT;                    { <-  Return the maximum number of characters the user can entry when property is edited in an EditText }
  1208.     END;
  1209.  
  1210.  
  1211. DETViewListChangedBlock = DETCallBlockTargetedHeader;
  1212.  
  1213.  
  1214. DETPropertyDirtiedBlock = DETCallBlockPropertyHeader;
  1215.  
  1216.  
  1217. DETValidateSaveBlock = RECORD
  1218.     reqFunction: DETCallFunctions;        { Requested function }
  1219.     callBack: DETCallBack;                { Pointer to call-back routine }
  1220.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1221.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1222.                                             common to all invocations of code resource) }
  1223.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1224.                                             code resource) }
  1225.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1226.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1227.  
  1228.     errorString: RStringHandle;            { <-  Handle with error string if validation fails (callee must allocate handle, DE will DisposHandle() it) }
  1229.     END;
  1230.  
  1231. { Valid commandIDs for DETDropQueryBlock and DETDropMeQueryBlock (in addition to property numbers): }
  1232. CONST
  1233. kDETDoNothing    = 'xxx0';
  1234. kDETMove        = 'move';
  1235. kDETDrag        = 'drag';
  1236. kDETAlias        = 'alis';
  1237.  
  1238. TYPE
  1239. DETDropQueryBlock = RECORD
  1240.     reqFunction: DETCallFunctions;        { Requested function }
  1241.     callBack: DETCallBack;                { Pointer to call-back routine }
  1242.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1243.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1244.                                             common to all invocations of code resource) }
  1245.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1246.                                             code resource) }
  1247.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1248.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1249.  
  1250.     modifiers: INTEGER;                    {  -> Modifiers at drop time (option/control/command/shift keys) }
  1251.     commandID: LONGINT;                    { <-> Command ID (kDETDoNothing, kDETMove, kDETDrag (copy), kDETAlias, or a property number) }
  1252.     destinationType: AttributeType;        { <-> Type to convert attribute to }
  1253.     copyToHFS: BOOLEAN;                    { <-  If true, object should be copied to HFS before being operated on, and deleted after }
  1254.     END;
  1255.  
  1256.  
  1257. DETDropMeQueryBlock = RECORD
  1258.     reqFunction: DETCallFunctions;        { Requested function }
  1259.     callBack: DETCallBack;                { Pointer to call-back routine }
  1260.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1261.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1262.                                             common to all invocations of code resource) }
  1263.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1264.                                             code resource) }
  1265.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1266.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1267.  
  1268.     modifiers: INTEGER;                    {  -> Modifiers at drop time (option/control/command/shift keys) }
  1269.     commandID: LONGINT;                    { <-> Command ID (kDETDoNothing, kDETMove, kDETDrag (copy), kDETAlias, or a property number) }
  1270.     destinationType: AttributeType;        { <-> Type to convert attribute to }
  1271.     copyToHFS: BOOLEAN;                    { <-  If true, object should be copied to HFS before being operated on, and deleted after }
  1272.     END;
  1273.  
  1274.  
  1275. DETAttributeCreationBlock = RECORD
  1276.     reqFunction: DETCallFunctions;        { Requested function }
  1277.     callBack: DETCallBack;                { Pointer to call-back routine }
  1278.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1279.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1280.                                             common to all invocations of code resource) }
  1281.  
  1282.     parent: PackedDSSpecPtr;            {  -> The object within which the creation will occur }
  1283.     refNum: INTEGER;                    {  -> Refnum for returned address (DSSpecs in PDs only) }
  1284.     identity: AuthIdentity;                {  -> The identity we're browsing as in the parent object }
  1285.     attrType: AttributeType;            { <-> The type of the attribute being created }
  1286.     attrTag: AttributeTag;                { <-> The tag of the attribute being created }
  1287.     value: Handle;                        { <-> The value to write (pre-allocated, resize as needed) }
  1288.     END;
  1289.  
  1290.  
  1291. DETAttributeNewBlock = RECORD
  1292.     reqFunction: DETCallFunctions;        { Requested function }
  1293.     callBack: DETCallBack;                { Pointer to call-back routine }
  1294.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1295.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1296.                                             common to all invocations of code resource) }
  1297.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1298.                                             code resource) }
  1299.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1300.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1301.  
  1302.     parent: PackedDSSpecPtr;            {  -> The object within which the creation will occur }
  1303.     refNum: INTEGER;                    {  -> Refnum for returned address (DSSpecs in PDs only) }
  1304.     identity: AuthIdentity;                {  -> The identity we're browsing as in the parent object }
  1305.     attrType: AttributeType;            { <-> The type of the attribute being created }
  1306.     attrTag: AttributeTag;                { <-> The tag of the attribute being created }
  1307.     value: Handle;                        { <-> The value to write (pre-allocated, resize as needed) }
  1308.     END;
  1309.  
  1310.  
  1311. DETAttributeChangeBlock = RECORD
  1312.     reqFunction: DETCallFunctions;        { Requested function }
  1313.     callBack: DETCallBack;                { Pointer to call-back routine }
  1314.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1315.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1316.                                             common to all invocations of code resource) }
  1317.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1318.                                             code resource) }
  1319.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1320.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1321.  
  1322.     parent: PackedDSSpecPtr;            {  -> The object within which the creation will occur }
  1323.     refNum: INTEGER;                    {  -> Refnum for returned address (DSSpecs in PDs only) }
  1324.     identity: AuthIdentity;                {  -> The identity we're browsing as in the parent object }
  1325.     attrType: AttributeType;            { <-> The type of the attribute being changed }
  1326.     attrTag: AttributeTag;                { <-> The tag of the attribute being changed }
  1327.     attrCID: AttributeCreationID;        { <-> The CID of the attribute being changed }
  1328.     value: Handle;                        { <-> The value to write (pre-allocated, resize as needed) }
  1329.     END;
  1330.  
  1331. DETAttributeDeleteBlock = RECORD
  1332.     reqFunction: DETCallFunctions;        { Requested function }
  1333.     callBack: DETCallBack;                { Pointer to call-back routine }
  1334.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1335.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1336.                                             common to all invocations of code resource) }
  1337.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1338.                                             code resource) }
  1339.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1340.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1341.  
  1342.     dsSpec: PackedDSSpecPtr;            {  -> The object within which the deletion will occur }
  1343.     refNum: INTEGER;                    {  -> Refnum for returned address (DSSpecs in PDs only) }
  1344.     identity: AuthIdentity;                {  -> The identity we're browsing as }
  1345.     END;
  1346.  
  1347. DETItemNewBlock = DETCallBlockTargetedHeader;
  1348.  
  1349. DETShouldSyncBlock = RECORD
  1350.     reqFunction: DETCallFunctions;        { Requested function }
  1351.     callBack: DETCallBack;                { Pointer to call-back routine }
  1352.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1353.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1354.                                             common to all invocations of code resource) }
  1355.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1356.                                             code resource) }
  1357.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1358.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1359.  
  1360.     shouldSync: BOOLEAN;                { <-  True if we should now sync with catalog }
  1361.     END;
  1362.  
  1363. DETDoSyncBlock = DETCallBlockTargetedHeader;
  1364.  
  1365. DETPatternInBlock = RECORD
  1366.     reqFunction: DETCallFunctions;        { Requested function }
  1367.     callBack: DETCallBack;                { Pointer to call-back routine }
  1368.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1369.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1370.                                             common to all invocations of code resource) }
  1371.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1372.                                             code resource) }
  1373.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1374.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1375.     property: INTEGER;                    { The property number the call refers to }
  1376.  
  1377.     elementType: LONGINT;                {  -> Element type from pattern }
  1378.     extra: LONGINT;                        {  -> Extra field from pattern }
  1379.     attribute: AttributePtr;            {  -> The complete attribute }
  1380.     dataOffset: LONGINT;                { <-> Offset to current (next) byte }
  1381.     bitOffset: INTEGER;                    { <-> Bit offset (next bit is ^fData >> fBitOffset++) }
  1382.     END;
  1383.  
  1384.  
  1385. DETPatternOutBlock = RECORD
  1386.     reqFunction: DETCallFunctions;        { Requested function }
  1387.     callBack: DETCallBack;                { Pointer to call-back routine }
  1388.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1389.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1390.                                             common to all invocations of code resource) }
  1391.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1392.                                             code resource) }
  1393.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1394.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1395.     property: INTEGER;                    { The property number the call refers to }
  1396.  
  1397.     elementType: LONGINT;                {  -> Element type from pattern }
  1398.     extra: LONGINT;                        {  -> Extra field from pattern }
  1399.     attribute: AttributePtr;            {  -> The attribute (minus the data portion) }
  1400.     data: Handle;                        {  -> Data to be written (pre-allocated, resize and add at end) }
  1401.     dataOffset: LONGINT;                { <-> Offset to next byte to write }
  1402.     bitOffset: INTEGER;                    { <-> Bit offset (if zero, handle will need to be resized to one more byte before write) }
  1403.     END;
  1404.  
  1405.  
  1406. DETOpenSelfBlock = RECORD
  1407.     reqFunction: DETCallFunctions;        { Requested function }
  1408.     callBack: DETCallBack;                { Pointer to call-back routine }
  1409.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1410.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1411.                                             common to all invocations of code resource) }
  1412.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1413.                                             code resource) }
  1414.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1415.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1416.  
  1417.     modifiers: INTEGER;                    { -> Modifiers at open time (option/control/command/shift keys) }
  1418.     END;
  1419.  
  1420.  
  1421. DETConvertToNumberBlock = RECORD
  1422.     reqFunction: DETCallFunctions;        { Requested function }
  1423.     callBack: DETCallBack;                { Pointer to call-back routine }
  1424.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1425.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1426.                                             common to all invocations of code resource) }
  1427.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1428.                                             code resource) }
  1429.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1430.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1431.     property: INTEGER;                    { The property number the call refers to }
  1432.  
  1433.     theValue: LONGINT;                    { <-  The converted value to return }
  1434.     END;
  1435.  
  1436.  
  1437. DETConvertToRStringBlock = RECORD
  1438.     reqFunction: DETCallFunctions;        { Requested function }
  1439.     callBack: DETCallBack;                { Pointer to call-back routine }
  1440.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1441.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1442.                                             common to all invocations of code resource) }
  1443.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1444.                                             code resource) }
  1445.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1446.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1447.     property: INTEGER;                    { The property number the call refers to }
  1448.  
  1449.     theValue: RStringHandle;            { <-  A handle with the converted value (callee must allocate handle, DE will DisposHandle() it) }
  1450.     END;
  1451.  
  1452.  
  1453. DETConvertFromNumberBlock = RECORD
  1454.     reqFunction: DETCallFunctions;        { Requested function }
  1455.     callBack: DETCallBack;                { Pointer to call-back routine }
  1456.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1457.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1458.                                             common to all invocations of code resource) }
  1459.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1460.                                             code resource) }
  1461.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1462.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1463.     property: INTEGER;                    { The property number the call refers to }
  1464.  
  1465.     theValue: LONGINT;                    {  -> The value to convert (result should be written direct to the property) }
  1466.     END;
  1467.  
  1468.  
  1469. DETConvertFromRStringBlock = RECORD
  1470.     reqFunction: DETCallFunctions;        { Requested function }
  1471.     callBack: DETCallBack;                { Pointer to call-back routine }
  1472.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1473.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1474.                                             common to all invocations of code resource) }
  1475.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1476.                                             code resource) }
  1477.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1478.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1479.     property: INTEGER;                    { The property number the call refers to }
  1480.  
  1481.     theValue: RStringPtr;                {  -> The value to convert (result should be written direct to the property) }
  1482.     END;
  1483.  
  1484.  
  1485. DETCustomViewDrawBlock = DETCallBlockPropertyHeader;
  1486.  
  1487.  
  1488. DETCustomViewMouseDownBlock = RECORD
  1489.     reqFunction: DETCallFunctions;        { Requested function }
  1490.     callBack: DETCallBack;                { Pointer to call-back routine }
  1491.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1492.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1493.                                             common to all invocations of code resource) }
  1494.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1495.                                             code resource) }
  1496.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1497.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1498.     property: INTEGER;                    { The property number the call refers to }
  1499.  
  1500.     theEvent: ^EventRecord;                {  -> The original event record of the mouse-down }
  1501.     END;
  1502.  
  1503.  
  1504. DETKeyPressBlock = RECORD
  1505.     reqFunction: DETCallFunctions;        { Requested function }
  1506.     callBack: DETCallBack;                { Pointer to call-back routine }
  1507.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1508.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1509.                                             common to all invocations of code resource) }
  1510.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1511.                                             code resource) }
  1512.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1513.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1514.     property: INTEGER;                    { The property number the call refers to }
  1515.  
  1516.     theEvent: ^EventRecord;                {  -> The original event record of the key-press }
  1517.     END;
  1518.  
  1519.  
  1520. DETPasteBlock = RECORD
  1521.     reqFunction: DETCallFunctions;        { Requested function }
  1522.     callBack: DETCallBack;                { Pointer to call-back routine }
  1523.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1524.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1525.                                             common to all invocations of code resource) }
  1526.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1527.                                             code resource) }
  1528.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1529.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1530.     property: INTEGER;                    { The property number the call refers to }
  1531.  
  1532.     modifiers: INTEGER;                    { -> Modifiers at paste time (option/control/command/shift keys) }
  1533.     END;
  1534.  
  1535. DETCustomMenuSelectedBlock = RECORD
  1536.     reqFunction: DETCallFunctions;        { Requested function }
  1537.     callBack: DETCallBack;                { Pointer to call-back routine }
  1538.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1539.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1540.                                             common to all invocations of code resource) }
  1541.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1542.                                             code resource) }
  1543.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1544.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1545.  
  1546.     menuTableParameter: INTEGER;        {  -> The "property" field from the custom menu table }
  1547.     END;
  1548.  
  1549.  
  1550. DETCustomMenuEnabledBlock = RECORD
  1551.     reqFunction: DETCallFunctions;        { Requested function }
  1552.     callBack: DETCallBack;                { Pointer to call-back routine }
  1553.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1554.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1555.                                             common to all invocations of code resource) }
  1556.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1557.                                             code resource) }
  1558.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1559.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1560.  
  1561.     menuTableParameter: INTEGER;        {  -> The "property" field from the custom menu table }
  1562.     enable: BOOLEAN;                    { <-  Whether to enable the menu item }
  1563.     END;
  1564.  
  1565.  
  1566. DETForwarderListItem = RECORD
  1567.     next: ^DETForwarderListPtr;            { Pointer to next item, or nil }
  1568.     attributeValueTag: AttributeTag;    { Tag of new templates (0 for none) }
  1569.     rstrs: PackedPathName;                { Record type (empty if none), attrbute type (empty if none),
  1570.                                             list of template names to forward to }
  1571.     END;
  1572.  
  1573. DETForwarderListPtr = ^DETForwarderListItem;
  1574. DETForwarderListHandle = ^DETForwarderListPtr;
  1575.  
  1576. DETDynamicForwardersBlock = RECORD
  1577.     reqFunction: DETCallFunctions;        { Requested function }
  1578.     callBack: DETCallBack;                { Pointer to call-back routine }
  1579.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1580.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1581.                                             common to all invocations of code resource) }
  1582.  
  1583.     forwarders: DETForwarderListHandle;    { <-  List of forwaders }
  1584.     END;
  1585.  
  1586.  
  1587. DETDynamicResourceBlock = RECORD
  1588.     reqFunction: DETCallFunctions;        { Requested function }
  1589.     callBack: DETCallBack;                { Pointer to call-back routine }
  1590.     callBackPrivate: LONGINT;            { Private data for the call-back routine }
  1591.     templatePrivate: LONGINT;            { Private storage for use by code resource (stays for life of code resource,
  1592.                                             common to all invocations of code resource) }
  1593.     instancePrivate: LONGINT;            { Private storage for use by code resource (separate for each item using the
  1594.                                             code resource) }
  1595.     target: DETTargetSpecification;        { The target (originator) of the call, for targeted and property calls }
  1596.     targetIsMainAspect: BOOLEAN;        { True if the target is the main aspect (even though it has a non-nil name) }
  1597.  
  1598.     resourceType: ResType;                {  -> The resource type being requested }
  1599.     propertyNumber: INTEGER;            {  -> The property number of the resource being requested }
  1600.     resourceID: INTEGER;                {  -> The resource ID (base ID + property number) of the resource }
  1601.     theResource: Handle;                { <-  The requested resource }
  1602.     END;
  1603.  
  1604.  
  1605.  
  1606. DETCallBlock = RECORD
  1607.     CASE INTEGER OF
  1608.          1: (protoCall: DETProtoCallBlock);
  1609.          2: (init: DETInitBlock);
  1610.          3: (exit: DETExitBlock);
  1611.          4: (instanceInit: DETInstanceInitBlock);
  1612.          5: (instanceExit: DETInstanceExitBlock);
  1613.          6: (instanceIdle: DETInstanceIdleBlock);
  1614.          7: (propertyCommand: DETPropertyCommandBlock);
  1615.          8: (maximumTextLength: DETMaximumTextLengthBlock);
  1616.          9: (viewListChanged: DETViewListChangedBlock);
  1617.         10: (propertyDirtied: DETPropertyDirtiedBlock);
  1618.         11: (validateSave: DETValidateSaveBlock);
  1619.         12: (dropQuery: DETDropQueryBlock);
  1620.         13: (dropMeQuery: DETDropMeQueryBlock);
  1621.         14: (attributeCreationBlock: DETAttributeCreationBlock);
  1622.         15: (attributeNew: DETAttributeNewBlock);
  1623.         16: (attributeChange: DETAttributeChangeBlock);
  1624.         17: (attributeDelete: DETAttributeDeleteBlock);
  1625.         18:    (itemNew: DETItemNewBlock);
  1626.         19: (patternIn: DETPatternInBlock);
  1627.         20: (patternOut: DETPatternOutBlock);
  1628.         21: (shouldSync: DETShouldSyncBlock);
  1629.         22: (doSync: DETDoSyncBlock);
  1630.         23: (openSelf: DETOpenSelfBlock);
  1631.         24: (convertToNumber: DETConvertToNumberBlock);
  1632.         25: (convertToRString: DETConvertToRStringBlock);
  1633.         26: (convertFromNumber: DETConvertFromNumberBlock);
  1634.         27: (convertFromRString: DETConvertFromRStringBlock);
  1635.         28: (customViewDraw: DETCustomViewDrawBlock);
  1636.         29: (customViewMouseDown: DETCustomViewMouseDownBlock);
  1637.         30: (keyPress: DETKeyPressBlock);
  1638.         31: (paste: DETPasteBlock);
  1639.         32: (customMenuSelected: DETCustomMenuSelectedBlock);
  1640.         33: (customMenuEnabled: DETCustomMenuEnabledBlock);
  1641.         34: (dynamicForwarders: DETDynamicForwardersBlock);
  1642.         35: (dynamicResource: DETDynamicResourceBlock);
  1643.     END;
  1644.  
  1645. DETCallBlockPtr = ^DETCallBlock;
  1646.  
  1647. { Call-for list: }
  1648.  
  1649. CONST
  1650. kDETCallForOther            = 1;            { Call for things not listed below (also auto-enabled by DE if any of the below are enabled) }
  1651. kDETCallForIdle                = 2;            { kDETcmdIdle }
  1652. kDETCallForCommands            = 4;            { kDETcmdPropertyCommand, kDETcmdSelfOpen }
  1653. kDETCallForViewChanges        = 8;            { kDETcmdViewListChanged, kDETcmdPropertyDirtied, kDETcmdMaximumTextLength }
  1654. kDETCallForDrops            = $10;            { kDETcmdDropQuery, kDETcmdDropMeQuery }
  1655. kDETCallForAttributes        = $20;            { kDETcmdAttributeCreation, kDETcmdAttributeNew, kDETcmdAttributeChange, kDETcmdAttributeDelete }
  1656. kDETCallForValidation        = $40;            { kDETcmdValidateSave }
  1657. kDETCallForKeyPresses        = $80;            { kDETcmdKeyPress and kDETcmdPaste }
  1658. kDETCallForResources        = $100;            { kDETcmdDynamicResource }
  1659. kDETCallForSyncing            = $200;            { kDETcmdShouldSync, kDETcmdDoSync }
  1660. kDETCallForEscalation        = $8000;        { All calls escalated from the next lower level }
  1661.  
  1662. kDETCallForNothing            = 0;            { None of the above }
  1663. kDETCallForEverything         = $FFFFFFFF;    { All of the above }
  1664.  
  1665. TYPE
  1666. DETCall = ProcPtr;
  1667.     { FUNCTION DETCall(callBlockPtr: DETCallBlockPtr): OSErr; }
  1668.  
  1669.  
  1670. { This following macro saves you from having to dig out the call-back pointer from the call block: }
  1671.  
  1672. { #define CallBackDET(callBlockPtr, callBackBlockPtr) ((*callBlockPtr->protoCall.callBack)(callBlockPtr,callBackBlockPtr)) }
  1673.  
  1674.  
  1675. { ************************************************************************************ }
  1676. { ********************************* SAM Definitions: ********************************* }
  1677. { ************************************************************************************ }
  1678.  
  1679.  
  1680. { SAM Developers should use property numbers starting at this point: }
  1681. CONST
  1682. kSAMFirstDevProperty = kDETFirstDevProperty + 10;
  1683.  
  1684.  
  1685. {
  1686.     SAM templates have additional resources/properties that are required
  1687.     for interaction with the AOCE Key Chain.
  1688.     
  1689.      Type    Offset                        Description
  1690.      ----    ------                        -----------
  1691.     'rstr'    kSAMAspectUserName            The user name
  1692.     'rstr'    kSAMAspectKind                The kind of SAM
  1693.     'detn'    kSAMAspectCannotDelete        If 0, then the slot cannot be deleted
  1694.     'sami'    kSAMAspectSlotCreationInfo    The info required to create a slot record
  1695. }
  1696.  
  1697. CONST
  1698. kSAMAspectUserName            = kDETFirstDevProperty + 1;
  1699. kSAMAspectKind                = kDETFirstDevProperty + 2;
  1700. kSAMAspectCannotDelete        = kDETFirstDevProperty + 3;
  1701. kSAMAspectSlotCreationInfo    = kDETFirstDevProperty + 4;
  1702.  
  1703.  
  1704. { ************************************************************************************** }
  1705. { ********************************* Admin Definitions: ********************************* }
  1706. { ************************************************************************************** }
  1707.  
  1708. kDETAdminVersion    = -978;
  1709.  
  1710. {$ENDC}    { UsingOCETemplates }
  1711.  
  1712. {$IFC NOT UsingIncludes}
  1713.     END.
  1714. {$ENDC}
  1715.